//1.在普通函数定义的前面加上async关键字，普通函数就变成了异步函数
//2.一步函数默认的返回值是promise对象
//3.在异步函数内部使用return关键字进行结果返回，结果会被包裹在promise对象中，return关键字代替了resolve方法
//4.在异步函数内部使用throw关键字进行错误的抛出
//5.调用异步函数再链式调用then方法获取异步函数执行结果
//6.调用异步函数再链式调用catch方法获取异步函数执行的错误信息

// async function fn() {
//   throw '发生了一些错误';
//   return 123;
// }
// fn().then((data)=>{
//   console.log(data)
// }).catch((err)=>{
//   console.log(err);
// })

//await关键字
// 1. await关键字只能出现在异步函数中
// 2. await promise  await后面只能写promise对象，写其他类型的API是不可以的
// 3. await关键字是暂停异步函数向下执行直到promise返回结果

async function p1() {
  return 'p1';
}
async function p2() {
  return 'p2';
}
async function p3() {
  return 'p3';
}
async function run() {
  let r1 = await p1();
  let r2 = await p2();
  let r3 = await p3();
  console.log(r1);
  console.log(r2);
  console.log(r3);
}
run();
